package flyway

import (
	"gitee.com/kristas/booting-go/framework/core/bean"
	"gitee.com/kristas/booting-go/framework/core/statement/types"
	ds "gitee.com/kristas/booting-go/framework/data/datasource"
	"gitee.com/kristas/booting-go/plugin/gorm_plugin"
	"gorm.io/gorm"
)

func NewStarter(datasource ...string) bean.Bean {
	d := &starter{}
	if len(datasource) > 0 {
		d.datasource = datasource[0]
	} else {
		d.datasource = ds.PropertiesPath
	}
	return d
}

type starter struct {
	types.Component
	datasource string
	db         *gorm.DB
}

func (f *starter) Bean() string {
	return "flyway_starter:" + f.datasource
}

func (f *starter) DataSource() string {
	return f.datasource
}

func (f *starter) SetDB(db ds.DB) {
	f.db = gorm_plugin.MustBindDB(db)
}

func (f *starter) Init() error {
	err := NewGormMigrator(f.db).Execute()
	if err != nil {
		return err
	}
	return nil
}
